<!doctype html>



  


<html class="theme-next mist use-motion" lang="zh-Hans">
<head>
  <meta charset="UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>



<meta http-equiv="Cache-Control" content="no-transform" />
<meta http-equiv="Cache-Control" content="no-siteapp" />















  
  
  <link href="/blog/lib/fancybox/source/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />




  
  
  
  

  
    
    
  

  

  

  

  

  
    
    
    <link href="//fonts.googleapis.com/css?family=Lato:300,300italic,400,400italic,700,700italic&subset=latin,latin-ext" rel="stylesheet" type="text/css">
  






<link href="/blog/lib/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />

<link href="/blog/css/main.css?v=5.1.0" rel="stylesheet" type="text/css" />


  <meta name="keywords" content="Hexo, NexT" />








  <link rel="shortcut icon" type="image/x-icon" href="/blog/favicon.ico?v=5.1.0" />






<meta name="description" content="网络协议 第三讲五类网络地址（A，B，C，D，E） CIDR无类型域间选路 （网络地址、主机号）构成CIDR类型的IP地址；网络出口地址、广播地址 公有地址、私有地址 MAC地址：网卡的物理地址 第四讲IP地址分配 包发送：目标机器与发送机器在同一个网段，或者和其一个网卡是同一个网段，则会发送ARP请求获取目标机器的MAC地址；如果不在同一个网段，则将包发送到网关。 网关要和当前网络至少一各网卡是">
<meta property="og:type" content="article">
<meta property="og:title" content="Niki">
<meta property="og:url" content="https://gitee.com/shuhao/2018/09/12/网络协议/index.html">
<meta property="og:site_name" content="Niki">
<meta property="og:description" content="网络协议 第三讲五类网络地址（A，B，C，D，E） CIDR无类型域间选路 （网络地址、主机号）构成CIDR类型的IP地址；网络出口地址、广播地址 公有地址、私有地址 MAC地址：网卡的物理地址 第四讲IP地址分配 包发送：目标机器与发送机器在同一个网段，或者和其一个网卡是同一个网段，则会发送ARP请求获取目标机器的MAC地址；如果不在同一个网段，则将包发送到网关。 网关要和当前网络至少一各网卡是">
<meta property="og:locale" content="zh-Hans">
<meta property="og:updated_time" content="2018-10-09T01:32:48.718Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Niki">
<meta name="twitter:description" content="网络协议 第三讲五类网络地址（A，B，C，D，E） CIDR无类型域间选路 （网络地址、主机号）构成CIDR类型的IP地址；网络出口地址、广播地址 公有地址、私有地址 MAC地址：网卡的物理地址 第四讲IP地址分配 包发送：目标机器与发送机器在同一个网段，或者和其一个网卡是同一个网段，则会发送ARP请求获取目标机器的MAC地址；如果不在同一个网段，则将包发送到网关。 网关要和当前网络至少一各网卡是">



<script type="text/javascript" id="hexo.configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/blog/',
    scheme: 'Mist',
    sidebar: {"position":"right","display":"post","offset":12,"offset_float":0,"b2t":false,"scrollpercent":false},
    fancybox: true,
    motion: true,
    duoshuo: {
      userId: '0',
      author: '博主'
    },
    algolia: {
      applicationID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    }
  };
</script>



  <link rel="canonical" href="https://gitee.com/shuhao/2018/09/12/网络协议/"/>





  <title>  | Niki </title>
</head>

<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">

  





  <script type="text/javascript">
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "https://hm.baidu.com/hm.js?cb9f0585e406f878cb2f29c89ad3cdb7";
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
  </script>










  
  
    
  

  <div class="container one-collumn sidebar-position-right page-post-detail ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-wrapper">
  <div class="site-meta ">
    

    <div class="custom-logo-site-title">
      <a href="/blog/"  class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">Niki</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
      
        <p class="site-subtitle">天道酬勤</p>
      
  </div>

  <div class="site-nav-toggle">
    <button>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
      <span class="btn-bar"></span>
    </button>
  </div>
</div>

<nav class="site-nav">
  

  
    <ul id="menu" class="menu">
      
        
        <li class="menu-item menu-item-home">
          <a href="/blog/" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />
            
            首页
          </a>
        </li>
      
        
        <li class="menu-item menu-item-categories">
          <a href="/blog/categories" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-categories"></i> <br />
            
            分类
          </a>
        </li>
      
        
        <li class="menu-item menu-item-archives">
          <a href="/blog/archives" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />
            
            归档
          </a>
        </li>
      
        
        <li class="menu-item menu-item-tags">
          <a href="/blog/tags" rel="section">
            
              <i class="menu-item-icon fa fa-fw fa-tags"></i> <br />
            
            标签
          </a>
        </li>
      

      
    </ul>
  

  
</nav>



 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            

  <div id="posts" class="posts-expand">
    

  

  
  
  

  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
    <link itemprop="mainEntityOfPage" href="https://gitee.com/shuhao/blog/2018/09/12/网络协议/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="name" content="Fang ShuHao">
      <meta itemprop="description" content="">
      <meta itemprop="image" content="/blog/images/head.jpg">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="Niki">
    </span>

    
      <header class="post-header">

        
        
          <h1 class="post-title" itemprop="name headline">
            
            
              
                
              
            
          </h1>
        

        <div class="post-meta">
          <span class="post-time">
            
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              
                <span class="post-meta-item-text">发表于</span>
              
              <time title="创建于" itemprop="dateCreated datePublished" datetime="2018-09-12T09:21:06+08:00">
                2018-09-12
              </time>
            

            

            
          </span>

          

          
            
          

          
          

          

          

          

        </div>
      </header>
    


    <div class="post-body" itemprop="articleBody">

      
      

      
        <p>网络协议</p>
<h1 id="第三讲"><a href="#第三讲" class="headerlink" title="第三讲"></a>第三讲</h1><p>五类网络地址（A，B，C，D，E）</p>
<p>CIDR无类型域间选路</p>
<p>（网络地址、主机号）构成CIDR类型的IP地址；网络出口地址、广播地址</p>
<p>公有地址、私有地址</p>
<p>MAC地址：网卡的物理地址</p>
<h1 id="第四讲"><a href="#第四讲" class="headerlink" title="第四讲"></a>第四讲</h1><p>IP地址分配</p>
<p>包发送：目标机器与发送机器在同一个网段，或者和其一个网卡是同一个网段，则会发送ARP请求获取目标机器的MAC地址；如果不在同一个网段，则将包发送到网关。</p>
<p>网关要和当前网络至少一各网卡是同一个网段的</p>
<p>配置网络地址：CIDR（192.168.0.13/24）、子网掩码（255.255.255.0）、网络地址（192.168.0.1）、广播地址（192.168.0.255）</p>
<p>DHCP：动态主机配置协议</p>
<ol>
<li>Discover （客户机发送）</li>
<li>DHCP request （服务机发送）</li>
<li>IP租用成功广播</li>
</ol>
<h1 id="第五讲-MAC层"><a href="#第五讲-MAC层" class="headerlink" title="第五讲 MAC层"></a>第五讲 MAC层</h1><p>MAC (Medium Access Control) 媒体访问控制器。处于第二层。所以第二层的地址也叫做MAC地址。MAC地址主要用来解决如下问题：</p>
<ol>
<li>网络上的数据包发送给谁。</li>
<li>网络上各个机器都在发送，会不会产生混乱，谁先发送，</li>
<li>如果发送出现错误怎么处理</li>
</ol>
<p>第二层网络包的格式<br>目标MAC-源MAC-类型-数据-CRC</p>
<p>类型主要有两种</p>
<ol>
<li>IPshuju</li>
<li>ARP请求、应答（查询机器的MAC地址协议）</li>
</ol>
<p>Hub 和 交换机设备的区别？</p>
<ul>
<li><p>Hub接收到一个机器发来的数据后，直接复制，向连接在Hub上所有的机器广播，不论这个数据的目标机器是谁。最终数据是不是发送给目标机器则完全有接入Hub的主机自行判断。（如果MAC地址，IP地址都是则接受数据，否则抛弃数据。）<br>这种方式在接入Hub的机器比较少时，可以运行，但是接入的机器比较多，则发生冲突的概率提高。并且，对所有的数据包都进行广播转发，也造成浪费。</p>
</li>
<li><p>交换机则是一个更加智能的二层设备。它会记录下那个口接入的电脑的MAC地址以及IP地址，在发送数据时，不属于目标地址的机器，不发送。因此降低了大量接入机器时冲突的概率。并且醉倒精准发送。</p>
</li>
</ul>
<p>交换机记录机器MAC地址的方法？<br>当有机器MAC1要发送数据到MAC2，交换机不知道MAC2，则也会把数据进行广播，但此时交换机会记录下MAC1的地址，这样在以后数据发送过程中，记录下整个网络中机器的MAC地址。这其实就是一个学习的过程。</p>
<p><strong>网络包在网关之间，通过MAC地址来确定网关位置，而不是通过IP地址来确定。因为如果修改了目标IP地址，等到了最后的网关，就不知道最终的目的地在哪里。所以都是通过MAC地址来查找下一个网关的位置。</strong></p>
<h1 id="第六讲"><a href="#第六讲" class="headerlink" title="第六讲"></a>第六讲</h1><h1 id="第七讲"><a href="#第七讲" class="headerlink" title="第七讲"></a>第七讲</h1><p>ping 和ICMP协议（Internet Controller Message Protocol）<br>ICMP报文封装在IP包里。<br>ICMP协议用来处理目标地址是否可访问，以及不能访问的原因，这些原因都封装在ICMP的差错报文中</p>
<ol>
<li>终点不可达（3）</li>
<li>源抑制 （4）</li>
<li>超时 （11）</li>
<li>重定向 （5）</li>
</ol>
<h1 id="第八讲"><a href="#第八讲" class="headerlink" title="第八讲"></a>第八讲</h1><p>MAC头和IP头包含的数据细节</p>
<p>三层设备（路由器），该设备取出MAC头和IP头，根据里面的内容，判断包接下来往哪里转发。</p>
<p>转发网关（不修改IP地址的网关）</p>
<p>NAT网关（修改IP地址网关）</p>
<p>二层网络和三层网络区别<br>二层网络通过MAC寻址，实现通讯，仅仅是同一个冲突域内；三层网络需要通过IP路由实现跨网段通讯，可以跨多个冲突域</p>
<h1 id="第九讲"><a href="#第九讲" class="headerlink" title="第九讲"></a>第九讲</h1><p>访问外网的路由协议</p>
<ul>
<li>静态路由 （自己配置路由规则）<br>可以用在机器数少的内部网络，或者数据中心；可以通过一个源ip路由到多个目的ip来做数据中心的负载</li>
<li>动态路由 （根据算法，选择下一跳的路由）</li>
</ul>
<p>路由动态算法</p>
<ul>
<li>Bellman-Ford算法：<br>距离矢量路由（distance vector routing）比较简单，但是坏消息收敛慢</li>
<li>Dijkstra算法<br>链路状态路由（link state routing）协议只广播更新的或改变的网络拓扑，更新信息小，节省带宽和cpu。坏消息收敛快。</li>
</ul>
<p>—————————————————————————————————网络层end—————————————————————————————————</p>
<p>—————————————————————————————————传输层begin—————————————————————————————————</p>
<h1 id="第十讲"><a href="#第十讲" class="headerlink" title="第十讲"></a>第十讲</h1><p>网络传输层的两个协议</p>
<ul>
<li><p>TCP</p>
</li>
<li><p>UDP<br>TCP需要三次握手，建立连接。UDP不需要。三次握手的意义</p>
</li>
</ul>
<p>发送可靠性（丢失），发送数据顺序，发送数据重复来分析两个协议的差别</p>
<p>TCP数据为流， UDP数据为数据包<br>TCP为一对一，UDP支持广播方式<br>TCP智能，根据网络流量控制数据发送的速度，以及记录是否发送数据，以及数据发送的顺序。UDP则不会<br>UDP应用场景</p>
<ol>
<li>直播</li>
<li>实时游戏</li>
<li>物联网IoT</li>
<li>个性化的：失败重传，自适应拥塞控制，快速链接的协议构建。如Google的QUIC（Quick UDP Internet Connections：快速UDP互联网链接）</li>
</ol>
<h1 id="第十一讲"><a href="#第十一讲" class="headerlink" title="第十一讲"></a>第十一讲</h1><p>TCP协议头</p>
<ul>
<li>顺序发送：TCP协议头中保存数据包序号字段</li>
<li>不丢包：TCP协议头中包含确认序号，确保目的服务器收到包，否则重发。</li>
<li>链接： 链接需要维护一个链接状态，TCP报文头有一系列状态头用来维持链接。URG，ACK，PSH，RST，SYN，FIN</li>
<li>发送控制：（流量控制，拥塞控制） 当网络环境不稳定是，TCP协议会根据网络环境控制发送的频率以及发送的数据量，从而适应当前的网络环境。在TCP报文中通过窗口大小进行控制。</li>
</ul>
<h1 id="第十二讲"><a href="#第十二讲" class="headerlink" title="第十二讲"></a>第十二讲</h1><ul>
<li><p>TCP协议如何做到一个可靠的协议（不丢，顺序，流量控制，拥塞控制）</p>
</li>
<li><p>发送端数据分类：<br>已发送确认、已发送未确认、未发送，可发送、未发送，不可发送</p>
</li>
<li><p>接收端数据分类<br>接收已确认、等待接收未确认、不能接收<br>接收已确认的数据虽然已经接收，但是还没有被应用层读取。</p>
</li>
</ul>
<p>|发送已确认|发送未确认|未发送可发送|未发送不可发送|<br>|1，2，3|4，5，6，7，8，9|10,11,12|13,14,15|</p>
<p>|接收已确认|等待接收未确认|不能接收|<br>|1，2，3，4，5|6，7，8，9，10,11，,1,13,14|15|</p>
<ul>
<li>确保数据不丢、顺序<br>当发送方发送出去的数据中，有没有收到接收方返回过来的确认ACK消息时，就会认为发送的包丢失，出发重试（可能接收方已收到数据，但是该数据的确认消息在网络传输过程中丢失，这样也会重试）<br>1、超时重试。确认消息没有返回到发送方，发送方会设置一个超时时间，超过超时时间则重发数据包。一次重发后仍没有收到确认包，下一次超时时间则为第一次超时时间的两倍，超过两次重试还没有收到接收方发送的确认包，则认为网络环境差，不宜反复发送。<br>超时时间的设置则是通过自适应重传算法确认。一定要大于包的往返时间RTT。否则引起不必要的重传。<br>2、快速重传机制<br>在某些特殊情况下，不必要等到超时就可重发数据包。例如。接收方收到了编号6,8,9号包，没有收到7号包，则发送三个冗余的6号数据包的ACK，发送方，收到后，不等超时，立即发送7号数据包。</li>
</ul>
<ul>
<li>流量控制<br>发送方会根据接收方的处理速度调整发送数据包的数量，通过窗口大小进行控制。</li>
</ul>
<p>发送方可以发送的数据窗口大小 = 发送未确认的数据 + 未发送可发送的数据。<br>如果发送确认的数据加1，则发送未确认的数据减1，未发送可发送的数据就会加1， 未发送，不可发送的数据就会减1.</p>
<ul>
<li>拥塞控制<br>拥塞控制也是基于窗口大小进行控制的</li>
</ul>
<h1 id="第十三讲"><a href="#第十三讲" class="headerlink" title="第十三讲"></a>第十三讲</h1><p>通过Socket使用TCP，UDP进行网络编程。</p>
<ul>
<li>Socket对应的TCP，UDP的网络编程差异</li>
<li>Socket在Linux中，如何处理双方的通信过程</li>
<li>在内核中，为每个 Socket 维护两个队列。一个是已经建立了连接的队列，这时候连接三次握手已经完毕，处于 established 状态；一个是还没有完全建立连接的队列，这个时候三次握手还没完成，处于 syn_rcvd 的状态。</li>
<li>TCP Socket进行数据传输过程中，会在内核维护两个队列：发送队列，接收队列。这两个队列的本质是文件。保存在内核中的文件。而对这些文件的读写操作则通过文件描述符记性。</li>
<li>一个机器如何处理多个TCP请求</li>
</ul>
<ol>
<li>复制进程 fork</li>
<li>复制线程 do_fork 通过调用pthread_create 创建子线程</li>
<li>IO多路复用，轮询的方式 selector</li>
<li>IO多路复用， 事件通知的方式</li>
</ol>
<h1 id="第十四讲"><a href="#第十四讲" class="headerlink" title="第十四讲"></a>第十四讲</h1><p>应用层的HTTP协议</p>
<ul>
<li>HTTP请求内容：</li>
</ul>
<ol>
<li>请求头 （版本，url， 方法）</li>
<li>首部 (K-V)</li>
<li>实体</li>
</ol>
<ul>
<li>HTTP响应</li>
</ul>
<ol>
<li>响应头 (版本， 状态码， 短语)</li>
<li>首部（K-V）</li>
<li>实体</li>
</ol>
<ul>
<li><p>HTTP协议发送的过程<br>TCP三次连接握手-请求生成（应用层）- TCP内容（传输层） = 获取目的mac（局域网则通过arp获取，非局域网获取网关mac，再传输到目的网络的入口网关，并获取出口网关mac，在获取目标主机mac）-目标主机接受，tcp序号是否已经接受，已接收则抛弃，未接受，则接受，并且ack。-解析出对应的端口，发送给对应的应用层处理</p>
</li>
<li><p>HTTP2.0</p>
</li>
</ul>
<h1 id="第十五讲"><a href="#第十五讲" class="headerlink" title="第十五讲"></a>第十五讲</h1><ul>
<li>加密方式</li>
</ul>
<ol>
<li>对称加密  ：效率高，保证安全的前提下，传输密钥的代价高</li>
<li>非对称加密：效率不高，但是能非常有效的在双方建立起协议。</li>
</ol>
<ul>
<li>网络通信过程中如何进行非对称加密</li>
</ul>
<ol>
<li>非对称加密时，公钥公开，发送给连接伙伴，自己保留私钥；用来解密伙伴用公钥加密的数据。</li>
<li>通信过程中，双方都需要把自己的公钥交给对方</li>
<li>为确保服务端的公钥的安全性，则客户端需要验证服务端的公钥，通过证书的方式验证。</li>
<li>证书验证的方式为：服务端将自己的一些信息（域名，证书办法这，证书期限，公钥等）交给权威证书机构（certificate authority），并且该机构先将这些信息进行Hash，然后用其私钥对该Hash值进行加密。</li>
<li>客户端不直接从服务端请求公钥，而是后的一个证书，并且到响应的机构去验证这个证书的合法性。</li>
<li>验证证书的合法性方式为：获取CA机构的公钥，并且把证书的信息进行Hash，然后用CA的公钥对从服务端获取的证书的加密值进行解密，并且与自己的Hash值进行匹配，成功则说明证书有效。</li>
<li>CA机构的公钥证书则靠上一层CA机构进行验证，层层网上递推，直到Root CA。一些Root CA的证书都是装在操作系统内的。因此，不要随便安装来不不明的操作系统。</li>
</ol>
<ul>
<li>https<br>https的加密传输 = 非对称加密 + 对称加密<br>非对称加密来传输双方约定的对称加密密钥。随后的数据传输过程中，采用对称密钥对传输内容进行加密。既保证的密钥的安全性，也兼顾了加密的效率。</li>
</ul>
<p>加密密钥 = 客户端连接时的随机数 + 服务端响应的随机数 + 客户端用服务端公钥加密的一个随机数（pre-master）<br>https建立连接的过程中，就是客户端和服务端约定加密密钥生成材料的过程，前两个随机数为客户端和服务端自行生成，后一个随机数有客户端生成，并且通过校验的服务端公钥进行加密后传输给服务端，再然后，双方用约定的密钥算法，和这三个随机数计算出双方数据传输的密钥。</p>
<h1 id="第十六讲"><a href="#第十六讲" class="headerlink" title="第十六讲"></a>第十六讲</h1><p>流媒体</p>
<h1 id="第十七讲"><a href="#第十七讲" class="headerlink" title="第十七讲"></a>第十七讲</h1><p>p2p就是peer-to-peer，采用BitTorrent协议的下载方式。下载过程中，每个下载的客户端都是一个peer</p>
<ul>
<li>下载协议</li>
</ul>
<ol>
<li>http</li>
<li>ftp</li>
<li>p2p<br>http和ftp的下载方式，都必须要有一个保存文件的服务器，因此下载的压力集中在服务器上，造成下载的瓶颈。<br>p2p的方式则是采用一种非中心话的下载方式。避免了集中下载的压力。</li>
</ol>
<ul>
<li>p2p下载原理<br>p2p下载必须要有种子文件 torrent文件。该文件中保存了一些文件的信息、以及如何下载文件的方式<br>文件信息：</li>
</ul>
<ol>
<li>info区：该种子有几个文件、文件多长、目录结构，以及目录和文件的名字</li>
<li>name字段：顶层目录名字</li>
<li>每个段大小： BitTorrent将文件分为很多段</li>
<li>段哈希值：整个种子中，每个段的SHA-1哈希值拼在一起</li>
</ol>
<ul>
<li>p2p tracker阶段<br>这个阶段的p2p下载，则必须要有一个tracker服务器，其下载流程为：</li>
</ul>
<ol>
<li>每个下载客户端解析.torrent文件后得知tracker服务器的连接地址</li>
<li>客户端连接tracker服务器，然后获取文件段的其他客户端的连接列表</li>
<li>连接这些客户端，与其通讯，交换彼此没有的文件段，在文件下载后，计算器SHA-1哈希值，与.torrent文件中的文件段哈希值进行比较，查看文件的正确性。不正确则重新下载。</li>
</ol>
<p>这种方式可以算是半去中心化，仍然有一个中心服务器tracker服务器，收集下载者信息，并将信息提供给其他下载者。</p>
<ul>
<li>p2p的DHT阶段<br>为了解决tracker服务器的中心化问题，p2p发展了一种叫做DHT的去中心化网络。用来负责解决存储这个网络里的资源信息和其他成员的联系信息。相当于所有人构成了一个庞大的分布式存储数据库。</li>
</ul>
<ol>
<li><p>此时，每个下载客户端启动后，拥有两个角色：一个peer角色，监听一个TCP端口，用于文件的上传下载；另一个是DHT Node角色，监听一个UDP接口，加入DHT网络</p>
</li>
<li><p>每个DHT Node 都需要保存一部分文件索引，也就是要知道某些文件保存在哪里。那么每个node要保存那些知识呢？</p>
</li>
<li><p>DHT网络中每隔Node有一个ID，这个ID和文件的哈希值一样是160bit。按规定每个Node需要保存和他ID哈希值相同的文件的位置，或者是和其ID哈希值相近的文件位置。（如低位中最后一位，或最后两位不同）但并不一定要保存文件。（可以知道文件位置，但不需要本身保存文件）</p>
</li>
<li><p>DHT网络中，每个Node都保存了部分文件的下载位置，那么Node如何去请求某个文件。<br>计算文件<br>需要通过 k-bucket的方式去寻找文件的位置，并且在寻找的过程中，记录自己应该保存的文件位置</p>
</li>
<li><p>在DHT网络中，也会有其他的Node告诉新加入的Node，其ID的Hash值和某文件Hash值相似，你应该知道该文件的下载位置。（这个信息由下载了某文件的Node节点，并且询问了新加入的Node节点的某个节点告知）</p>
</li>
</ol>
<h1 id="十八讲"><a href="#十八讲" class="headerlink" title="十八讲"></a>十八讲</h1><p>DNS，网络地址簿，域名与IP的对应关系</p>
<ul>
<li>DNS分类</li>
</ul>
<ol>
<li>根域名服务器  （root）</li>
<li>顶级域名服务器 （com、net、cn）</li>
<li>权威域名服务其（163.com, qq.com, google.cn）</li>
</ol>
<ul>
<li>请求根据域名查询IP的过程</li>
</ul>
<ol>
<li>客户端本地查看是否有对应的缓存信息，如果有，则直接拿到IP进行访问，没有则访问本地DNS</li>
<li>本地DNS也会先查看自己的缓存，是否有对应关系，有则返回给客户端，没有则访问根域名。（首先需要了解一个概念就是本地DNS，本地DNS一般在你网络服务商的机房中）</li>
<li>根域名并不保存域名对应的Ip地址信息，而是指明查询域名的服务器。如访问qq.com，则会推荐查询.com 服务器去查询</li>
<li>根据根服务器推荐，去顶级域名服务其查询，顶级服务器也是推荐权威域名服务器</li>
<li>权威域名服务器返回对应的IP，给到客户端，发起请求</li>
</ol>
<p>所以查询域名IP的过程是一个DNS递归的过程（根域名 –&gt; 顶级域名 –&gt; 权威域名）</p>
<ul>
<li>DNS服务器对访问的优化</li>
</ul>
<ol>
<li>减少运维成本，当访问的数据服务器从IP改为域名，通过DNS寻址访问，如果数据服务器发生迁移，则无需修改客户端，只需要修改DNS中相关的域名，IP映射即可，减少运维成本</li>
<li>提供负载均衡，增加访问体验。DNS可以根据一定的负载算法，返解析出域名对应最优的IP给到用户。（根据服务器负载，服务器离访问客户端的距离，请求所处运营商，含有请求内容的服务其）</li>
</ol>
<h2 id="思考问题"><a href="#思考问题" class="headerlink" title="思考问题"></a>思考问题</h2><ol>
<li><p>全局负载均衡为什么要分地址和运营商呢？</p>
</li>
<li><p>全局负载均衡使用过程中，常常遇到失灵的情况，你知道具体有哪些情况吗？对应应该怎么来解决呢？</p>
</li>
</ol>
<h1 id="十九讲"><a href="#十九讲" class="headerlink" title="十九讲"></a>十九讲</h1><ul>
<li><p>传统DNS的问题</p>
</li>
<li><p>HTTPDNS是什么</p>
</li>
<li><p>HTTPDNS如何解决传统DNS问题</p>
</li>
<li><p>HTTPDNS两种缓存策略</p>
</li>
</ul>
<h1 id="二十讲"><a href="#二十讲" class="headerlink" title="二十讲"></a>二十讲</h1><p>CDN</p>
<ul>
<li><p>CDN作用<br>用来缓存一些静态资源，或者是不经常变动的资源，减轻真是服务器的压力。</p>
</li>
<li><p>划分</p>
</li>
</ul>
<ol>
<li>中心节点</li>
<li>区域节点</li>
<li>边缘节点<br>越往下，则保存的数据的变动性越小</li>
</ol>
<h1 id="二十四讲"><a href="#二十四讲" class="headerlink" title="二十四讲"></a>二十四讲</h1><p>云中网络</p>
<ul>
<li><p>虚拟机如何实现<br>qemu-kvm进行实现，采用软件技术虚拟化物理资源，使上层应用无法感知是否访问的是否为真正的物理资源</p>
</li>
<li><p>虚拟网络要</p>
</li>
</ul>
<ol>
<li>共享</li>
<li>隔离</li>
<li>互通</li>
<li>灵活</li>
</ol>
<ul>
<li>如何实现虚拟网络的共享</li>
</ul>
<ol>
<li>虚拟网桥<br>创建一个虚拟网桥br0，将所有的虚拟机网卡连接到虚拟网桥br0上，实现虚拟机之间互通。如果不考虑访问外网，则可以使用（host-only模式）</li>
<li>访问外网<br>访问外网的虚拟机互通有两种模式<br>2.1. 桥接模式<br>桥接模式会创建一个虚拟交换机，将所有的虚拟机连接到虚拟交换机上，并且虚拟交换机连接到物理网卡上。与外部网络互通，实现上网。这种方式，虚拟机和物理机在同一个网段内。</li>
</ol>
<p>2.2. NAT模式</p>
<p>同样将所有的虚拟机连接在一个虚拟交换机上，但是虚拟交换机不直接和物理网卡连接，中间还有一个NAT设备，这个NAT设备一端连接虚拟交换机，一端连接物理网卡，并且，在虚拟机的宿主机上还要安装一个虚拟DHCP服务器，来管理虚拟机的IP地址（桥接时，虚拟机与物理机共享其DHCP服务器）；通过这样的方式实现上网。<br>此时虚拟机的网络地址与物理机的网络地址不在一个网段内。因为虚拟机使用了自己的虚拟DHCP服务器（与物理机的DHCP不一样），分配IP。</p>
<ol>
<li>隔离</li>
</ol>
<ul>
<li>网桥支持vlan功能，同一个网桥上的两个虚拟机可以设置两个虚拟机的tag，从而实现虚拟机的不互通。</li>
<li>跨物理机的虚拟机则需要通过VLAN隔离，需要创建带VLAN的虚拟网卡，不同网卡出来的包带有VLAN的ID，因此在另外的物理机上，也有待VLAN的网卡，不同的VLANId，不能访问其他VLAN网卡出来的包。<br>但是这种方式有个缺点就是VLAN的Id最多有4096个，无法满足一个大型数据中心的需求</li>
</ul>
<p>这种方式比较复杂，为什么还要有这种方式呢？因为将所有的机器都连接在一个交换机上（虚拟网桥）时，如果连接的机器一多，就会有很严重的广播问题。所以需要记性VLAN划分。这就是NAT模式。NAT模式下，</p>

      
    </div>

    <div>
      
        

      
    </div>

    <div>
      
        

      
    </div>


    <footer class="post-footer">
      

      
        
      

      
        <div class="post-nav">
          <div class="post-nav-next post-nav-item">
            
              <a href="/blog/2018/08/30/logback源码阅读/" rel="next" title="logback源码阅读">
                <i class="fa fa-chevron-left"></i> logback源码阅读
              </a>
            
          </div>

          <span class="post-nav-divider"></span>

          <div class="post-nav-prev post-nav-item">
            
              <a href="/blog/2018/09/25/Spring三种扩展机制/" rel="prev" title="Spring三种扩展机制">
                Spring三种扩展机制 <i class="fa fa-chevron-right"></i>
              </a>
            
          </div>
        </div>
      

      
      
    </footer>
  </article>



    <div class="post-spread">
      
    </div>
  </div>

          
          </div>
          


          
  <div class="comments" id="comments">
    
      <div id="lv-container" data-id="city" data-uid="MTAyMC8zNjY5NS8xMzIzMA=="></div>
    
  </div>


        </div>
        
          
  
  <div class="sidebar-toggle">
    <div class="sidebar-toggle-line-wrap">
      <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
      <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
    </div>
  </div>

  <aside id="sidebar" class="sidebar">
    <div class="sidebar-inner">

      

      
        <ul class="sidebar-nav motion-element">
          <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
            文章目录
          </li>
          <li class="sidebar-nav-overview" data-target="site-overview">
            站点概览
          </li>
        </ul>
      

      <section class="site-overview sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
          <img class="site-author-image" itemprop="image"
               src="/blog/images/head.jpg"
               alt="Fang ShuHao" />
          <p class="site-author-name" itemprop="name">Fang ShuHao</p>
           
              <p class="site-description motion-element" itemprop="description"></p>
          
        </div>
        <nav class="site-state motion-element">
        
          
            <div class="site-state-item site-state-posts">
              <a href="/blog/archives">
                <span class="site-state-item-count">135</span>
                <span class="site-state-item-name">日志</span>
              </a>
            </div>
          

          
            <div class="site-state-item site-state-categories">
              <a href="/blog/categories">
                <span class="site-state-item-count">35</span>
                <span class="site-state-item-name">分类</span>
              </a>
            </div>
          

          
            <div class="site-state-item site-state-tags">
              <a href="/blog/tags">
                <span class="site-state-item-count">93</span>
                <span class="site-state-item-name">标签</span>
              </a>
            </div>
          

        </nav>

        

        <div class="links-of-author motion-element">
          
        </div>

        
        

        
        

        


      </section>

      
      <!--noindex-->
        <section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
          <div class="post-toc">

            
              
            

            
              <div class="post-toc-content"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#第三讲"><span class="nav-number">1.</span> <span class="nav-text">第三讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第四讲"><span class="nav-number">2.</span> <span class="nav-text">第四讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第五讲-MAC层"><span class="nav-number">3.</span> <span class="nav-text">第五讲 MAC层</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第六讲"><span class="nav-number">4.</span> <span class="nav-text">第六讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第七讲"><span class="nav-number">5.</span> <span class="nav-text">第七讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第八讲"><span class="nav-number">6.</span> <span class="nav-text">第八讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第九讲"><span class="nav-number">7.</span> <span class="nav-text">第九讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第十讲"><span class="nav-number">8.</span> <span class="nav-text">第十讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第十一讲"><span class="nav-number">9.</span> <span class="nav-text">第十一讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第十二讲"><span class="nav-number">10.</span> <span class="nav-text">第十二讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第十三讲"><span class="nav-number">11.</span> <span class="nav-text">第十三讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第十四讲"><span class="nav-number">12.</span> <span class="nav-text">第十四讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第十五讲"><span class="nav-number">13.</span> <span class="nav-text">第十五讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第十六讲"><span class="nav-number">14.</span> <span class="nav-text">第十六讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#第十七讲"><span class="nav-number">15.</span> <span class="nav-text">第十七讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#十八讲"><span class="nav-number">16.</span> <span class="nav-text">十八讲</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#思考问题"><span class="nav-number">16.1.</span> <span class="nav-text">思考问题</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#十九讲"><span class="nav-number">17.</span> <span class="nav-text">十九讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#二十讲"><span class="nav-number">18.</span> <span class="nav-text">二十讲</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#二十四讲"><span class="nav-number">19.</span> <span class="nav-text">二十四讲</span></a></li></ol></div>
            

          </div>
        </section>
      <!--/noindex-->
      

      

    </div>
  </aside>


        
      </div>
    </main>

    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  
  &copy; 
  <span itemprop="copyrightYear">2019</span>
  <span class="with-love">
    <i class="fa fa-heart"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">Fang ShuHao</span>
</div>


<div class="powered-by">
  由 <a class="theme-link" href="https://hexo.io">Hexo</a> 强力驱动
</div>

<div class="theme-info">
  主题 -
  <a class="theme-link" href="https://github.com/iissnan/hexo-theme-next">
    NexT.Mist
  </a>
</div>


        

        
      </div>
    </footer>

    
      <div class="back-to-top">
        <i class="fa fa-arrow-up"></i>
        
      </div>
    
    
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>









  




  
  <script type="text/javascript" src="/blog/lib/jquery/index.js?v=2.1.3"></script>

  
  <script type="text/javascript" src="/blog/lib/fastclick/lib/fastclick.min.js?v=1.0.6"></script>

  
  <script type="text/javascript" src="/blog/lib/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>

  
  <script type="text/javascript" src="/blog/lib/velocity/velocity.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/blog/lib/velocity/velocity.ui.min.js?v=1.2.1"></script>

  
  <script type="text/javascript" src="/blog/lib/fancybox/source/jquery.fancybox.pack.js?v=2.1.5"></script>


  


  <script type="text/javascript" src="/blog/js/src/utils.js?v=5.1.0"></script>

  <script type="text/javascript" src="/blog/js/src/motion.js?v=5.1.0"></script>



  
  

  
  <script type="text/javascript" src="/blog/js/src/scrollspy.js?v=5.1.0"></script>
<script type="text/javascript" src="/blog/js/src/post-details.js?v=5.1.0"></script>



  


  <script type="text/javascript" src="/blog/js/src/bootstrap.js?v=5.1.0"></script>



  



  




	





  





  





  
    <script type="text/javascript">
      (function(d, s) {
        var j, e = d.getElementsByTagName(s)[0];
        if (typeof LivereTower === 'function') { return; }
        j = d.createElement(s);
        j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
        j.async = true;
        e.parentNode.insertBefore(j, e);
      })(document, 'script');
    </script>
  



  
  

  

  

  

  


  

</body>
</html>
